/**
 * @author 李伟
 * @module  核心组件
 * @exports Common
 * @description
 * 公共方法，ajax,dotjs
 * @example
 *
 */
(function($){
    /* global Config */
    /**
     *初始化参数
     */
    window.Common = {
        config:{
            baseurl:'url'
        }
    };
    /**
     * @func getData
     * @desc 异步获取数据
     * @param {string} url 异步请求的地址
     * @param {object} data 请求的参数
     * @param {function} callback 回调函数
     * @returns {boolean}
     * @example
     * Common.getData("/test",“{}”,function(data){})
     */
    Common.getData = function(url,data,callback){
        var encodeUrl = encodeURIComponent(url);
        $.ajax({
            type: "GET",
            data:data,
            url: encodeUrl,
            dataType: "jsonp",
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            success: function(rep){
                if(!rep){
                    //$("#pageLoading").hide();
                    return;
                }
                try{
                    $.isPlainObject(rep);
                }catch(e){
                    console.log("数据解析错误!");
                    return;
                }
                callback.apply(this,arguments);
            }
        });

    };

    /**
     * @func eva
     * @desc 通用的将字符串转为json
     * @param {string} str
     * @returns {object}
     */
    Common.eva = function(str){
        try{
            return eval(str);
        }catch(e){
            return {};
        }
    };

    /**
     * @func goTo
     * @desc 跳转页面
     * @param {string} url
     * @returns {object}
     */
    Common.goTo = function(url){
        location.href = url;
    };

    /**
     * @func render
     * @desc 页面渲染
     * @param {object} cfg
     * @param {object} cfg.tmpl dotjs的模板对象
     * @param {object} cfg.data 渲染模板所需要数据
     * @param {string} cfg.context 渲染的模板将被插入的容器选择器
     * @param {function} cfg.callback 渲染完成的回调方法
     * @param {boolean} [cfg.overwrite] 是否清空容器原有内容 默认不清空
     * @example
     * Common.render(cfg);
     */
    Common.render = function(cfg){
        var self = this,
            _data = cfg.data,
            dom = '',
            context = cfg.context,
            callback = cfg.callback,
            _tmpl = doT.template($(cfg.tmpl).html());
        if(cfg.overwrite){
            $(context).empty();
        }
        if(_tmpl){
            dom = self.renderHtml($.trim(_tmpl(_data)),context);
        }else{
            console.log("对应的模块不存在!");
        }
        callback && callback.call(this,{data: _data,dom:dom});

    };

    /**
     * @func renderHtml
     * @desc 将tmpl插入到context里
     * @param {string} tmpl 模板生成的html字符串
     * @param {string} context 选择器
     */
    Common.renderHtml = function(tmpl,context){
        var contentEl = $(context);
        return $(tmpl).appendTo(contentEl);
    };

    /**
     * @func send
     * @desc 创建一个图片用来发送
     * @param url {string} 发送url
     */
    Common.send= function(url) {
        var img = new Image(),
            id = "__img__" + Math.random();
        window[id] = img;
        img.onload = img.onerror = function () {
            window[id] = null;
        };
        img.src = url;
        img = null;
    };
})(jQuery)

